##      Index                 Cash          
##  Min.   :2003-12-31   Min.   :8.333e-06  
##  1st Qu.:2008-05-23   1st Qu.:5.831e-05  
##  Median :2012-10-15   Median :2.413e-04  
##  Mean   :2012-10-14   Mean   :9.881e-04  
##  3rd Qu.:2017-03-07   3rd Qu.:1.613e-03  
##  Max.   :2021-07-31   Max.   :4.098e-03
##      Index              APP_Equity       
##  Min.   :2003-12-31   Min.   :-0.189341  
##  1st Qu.:2008-05-23   1st Qu.:-0.015114  
##  Median :2012-10-15   Median : 0.014166  
##  Mean   :2012-10-14   Mean   : 0.008467  
##  3rd Qu.:2017-03-07   3rd Qu.: 0.031042  
##  Max.   :2021-07-31   Max.   : 0.128278
##       date                CTA_EW              GAA_EW         
##  Min.   :2003-12-31   Min.   :-0.061847   Min.   :-0.037006  
##  1st Qu.:2008-05-23   1st Qu.:-0.010480   1st Qu.:-0.003968  
##  Median :2012-10-15   Median : 0.002345   Median : 0.003140  
##  Mean   :2012-10-14   Mean   : 0.004393   Mean   : 0.003108  
##  3rd Qu.:2017-03-07   3rd Qu.: 0.019218   3rd Qu.: 0.010403  
##  Max.   :2021-07-31   Max.   : 0.068728   Max.   : 0.036536  
##  Global_Macro_EW       Insurance         LS_AsiaPacific_EW  
##  Min.   :-0.022351   Min.   :-0.089613   Min.   :-0.081567  
##  1st Qu.:-0.001460   1st Qu.: 0.002442   1st Qu.:-0.007486  
##  Median : 0.004458   Median : 0.004831   Median : 0.009774  
##  Mean   : 0.005261   Mean   : 0.003661   Mean   : 0.007499  
##  3rd Qu.: 0.010832   3rd Qu.: 0.008080   3rd Qu.: 0.022992  
##  Max.   : 0.032367   Max.   : 0.023122   Max.   : 0.094193  
##  LS_Emerging_EW       LS_Europe_EW        LS_Japan_EW       
##  Min.   :-0.083059   Min.   :-0.051757   Min.   :-0.039163  
##  1st Qu.:-0.005037   1st Qu.:-0.002369   1st Qu.:-0.005524  
##  Median : 0.005482   Median : 0.006464   Median : 0.004829  
##  Mean   : 0.005695   Mean   : 0.005298   Mean   : 0.004355  
##  3rd Qu.: 0.020415   3rd Qu.: 0.015463   3rd Qu.: 0.014224  
##  Max.   : 0.075198   Max.   : 0.043362   Max.   : 0.074159  
##     LS_US_EW          Activist_EW        Distressed_EW      
##  Min.   :-0.075922   Min.   :-0.192017   Min.   :-0.127679  
##  1st Qu.:-0.004120   1st Qu.:-0.005824   1st Qu.:-0.001308  
##  Median : 0.008404   Median : 0.013649   Median : 0.008882  
##  Mean   : 0.006572   Mean   : 0.009510   Mean   : 0.006498  
##  3rd Qu.: 0.020508   3rd Qu.: 0.029190   3rd Qu.: 0.018612  
##  Max.   : 0.068436   Max.   : 0.140921   Max.   : 0.059401  
##     EM_FI_EW          Risk_Arb_EW           CB_Arb_EW         
##  Min.   :-0.151024   Min.   :-0.0710488   Min.   :-1.678e-01  
##  1st Qu.:-0.001335   1st Qu.: 0.0005777   1st Qu.:-9.343e-05  
##  Median : 0.007693   Median : 0.0053151   Median : 5.191e-03  
##  Mean   : 0.005597   Mean   : 0.0045766   Mean   : 4.319e-03  
##  3rd Qu.: 0.015054   3rd Qu.: 0.0102700   3rd Qu.: 1.114e-02  
##  Max.   : 0.066288   Max.   : 0.0457308   Max.   : 5.759e-02  
##   RV_Credit_EW           RV_FI_EW            FEMN_EW          
##  Min.   :-0.0758836   Min.   :-0.077048   Min.   :-0.0384668  
##  1st Qu.: 0.0006532   1st Qu.: 0.002183   1st Qu.: 0.0009088  
##  Median : 0.0056707   Median : 0.005459   Median : 0.0046945  
##  Mean   : 0.0048713   Mean   : 0.005266   Mean   : 0.0046329  
##  3rd Qu.: 0.0108290   3rd Qu.: 0.009540   3rd Qu.: 0.0081502  
##  Max.   : 0.0554850   Max.   : 0.038178   Max.   : 0.0278396  
##     QEMN_EW           Stat_Arb_EW         Struct_Credit_EW   
##  Min.   :-0.035270   Min.   :-0.0223665   Min.   :-0.215960  
##  1st Qu.:-0.001050   1st Qu.:-0.0001626   1st Qu.: 0.004632  
##  Median : 0.004115   Median : 0.0052306   Median : 0.009187  
##  Mean   : 0.003088   Mean   : 0.0049345   Mean   : 0.008201  
##  3rd Qu.: 0.008663   3rd Qu.: 0.0107617   3rd Qu.: 0.014009  
##  Max.   : 0.028764   Max.   : 0.0369139   Max.   : 0.047022
##                   portfolio.returns
## Annualized Return         0.0664236
##                               portfolio.returns
## Annualized Standard Deviation        0.04434676
##    portfolio.returns
## ES       -0.05227485
## Skew -1.842259
## Excess Kurtosis 9.791905
##                                   portfolio.returns
## Annualized Sharpe Ratio (Rf=1.2%)          1.214195
## beta 0.247593
## bull beta 0.2141524
## bear beta 0.2867415
##         From     Trough         To   Depth Length To Trough Recovery
## 1 2008-06-30 2008-11-30 2009-08-31 -0.1206     15         6        9
## 2 2020-02-29 2020-03-31 2020-08-31 -0.0910      7         2        5
## 3 2011-05-31 2011-09-30 2012-03-31 -0.0479     11         5        6
## 4 2018-10-31 2018-12-31 2019-04-30 -0.0339      7         3        4
## 5 2015-06-30 2016-02-29 2016-07-31 -0.0275     14         9        5

Equal Weighted

##            CTA_EW GAA_EW Global_Macro_EW Insurance LS_AsiaPacific_EW
## 2003-12-31   0.05   0.05            0.05      0.05              0.05
##            LS_Emerging_EW LS_Europe_EW LS_Japan_EW LS_US_EW Activist_EW
## 2003-12-31           0.05         0.05        0.05     0.05        0.05
##            Distressed_EW EM_FI_EW Risk_Arb_EW CB_Arb_EW RV_Credit_EW RV_FI_EW
## 2003-12-31          0.05     0.05        0.05      0.05         0.05     0.05
##            FEMN_EW QEMN_EW Stat_Arb_EW Struct_Credit_EW
## 2003-12-31    0.05    0.05        0.05             0.05
##                CTA_EW     GAA_EW Global_Macro_EW  Insurance LS_AsiaPacific_EW
## 2003-12-31 0.05000000 0.05000000      0.05000000 0.05000000        0.05000000
## 2004-01-31 0.05000000 0.05000000      0.05000000 0.05000000        0.05000000
## 2004-02-29 0.04962737 0.05023319      0.04959375 0.04976629        0.04953860
## 2004-03-31 0.05113401 0.05047775      0.04957747 0.04931112        0.04960595
## 2004-04-30 0.05000000 0.05000000      0.05000000 0.05000000        0.05000000
## 2004-05-31 0.04805664 0.04834972      0.04963033 0.05023882        0.04933064
##            LS_Emerging_EW LS_Europe_EW LS_Japan_EW   LS_US_EW Activist_EW
## 2003-12-31     0.05000000   0.05000000  0.05000000 0.05000000  0.05000000
## 2004-01-31     0.05000000   0.05000000  0.05000000 0.05000000  0.05000000
## 2004-02-29     0.05064870   0.05075802  0.04942317 0.05024503  0.05098515
## 2004-03-31     0.05165204   0.05100613  0.04894911 0.05027759  0.05199205
## 2004-04-30     0.05000000   0.05000000  0.05000000 0.05000000  0.05000000
## 2004-05-31     0.04922280   0.05037352  0.05141845 0.04968641  0.04992745
##            Distressed_EW   EM_FI_EW Risk_Arb_EW  CB_Arb_EW RV_Credit_EW
## 2003-12-31    0.05000000 0.05000000  0.05000000 0.05000000   0.05000000
## 2004-01-31    0.05000000 0.05000000  0.05000000 0.05000000   0.05000000
## 2004-02-29    0.05078443 0.05037252  0.04952264 0.04996884   0.04990830
## 2004-03-31    0.05043592 0.05026095  0.04954415 0.04953606   0.04929738
## 2004-04-30    0.05000000 0.05000000  0.05000000 0.05000000   0.05000000
## 2004-05-31    0.05065286 0.05024499  0.05023268 0.05036234   0.05038345
##              RV_FI_EW    FEMN_EW    QEMN_EW Stat_Arb_EW Struct_Credit_EW
## 2003-12-31 0.05000000 0.05000000 0.05000000  0.05000000       0.05000000
## 2004-01-31 0.05000000 0.05000000 0.05000000  0.05000000       0.05000000
## 2004-02-29 0.04959373 0.04959279 0.04962966  0.04971188       0.05009593
## 2004-03-31 0.04932985 0.04912521 0.04932157  0.04916328       0.05000241
## 2004-04-30 0.05000000 0.05000000 0.05000000  0.05000000       0.05000000
## 2004-05-31 0.05077590 0.05011911 0.04992245  0.05027438       0.05079706
##                   portfolio.returns
## Annualized Return        0.06591167
##                               portfolio.returns
## Annualized Standard Deviation        0.04148786
##    portfolio.returns
## ES       -0.04246524
## Skew -1.542221
## Excess Kurtosis 7.199068
##                                   portfolio.returns
## Annualized Sharpe Ratio (Rf=1.2%)          1.287277
## beta 0.2325685
## bull beta 0.2074339
## bear beta 0.2661045
##         From     Trough         To   Depth Length To Trough Recovery
## 1 2008-06-30 2008-11-30 2009-08-31 -0.1184     15         6        9
## 2 2020-02-29 2020-03-31 2020-07-31 -0.0748      6         2        4
## 3 2011-05-31 2011-09-30 2012-02-29 -0.0448     10         5        5
## 4 2018-02-28 2018-12-31 2019-03-31 -0.0308     14        11        3
## 5 2015-06-30 2016-02-29 2016-07-31 -0.0219     14         9        5

## # A tibble: 1 × 10
##   Portfolio      Return  StDev `Expected Shortfa…`  Skew Kurtosis `Sharpe Ratio`
##   <chr>           <dbl>  <dbl>               <dbl> <dbl>    <dbl>          <dbl>
## 1 Equal Weighted 0.0659 0.0415             -0.0425 -1.54     7.20           1.29
## # … with 3 more variables: `Equity Beta` <dbl>, `Bear Beta` <dbl>,
## #   `Bull Beta` <dbl>

Risk Parity (equal risk weighted)

## $w
##            CTA_EW            GAA_EW   Global_Macro_EW         Insurance 
##        0.09460730        0.04799774        0.04663004        0.10716993 
## LS_AsiaPacific_EW    LS_Emerging_EW      LS_Europe_EW       LS_Japan_EW 
##        0.03884290        0.03653035        0.03652351        0.05514338 
##          LS_US_EW       Activist_EW     Distressed_EW          EM_FI_EW 
##        0.03613477        0.03976235        0.03855157        0.04090004 
##       Risk_Arb_EW         CB_Arb_EW      RV_Credit_EW          RV_FI_EW 
##        0.04563462        0.04114148        0.03884820        0.05443729 
##           FEMN_EW           QEMN_EW       Stat_Arb_EW  Struct_Credit_EW 
##        0.04261355        0.05464390        0.05402889        0.04985818 
## 
## $relative_risk_contribution
##            CTA_EW            GAA_EW   Global_Macro_EW         Insurance 
##              0.05              0.05              0.05              0.05 
## LS_AsiaPacific_EW    LS_Emerging_EW      LS_Europe_EW       LS_Japan_EW 
##              0.05              0.05              0.05              0.05 
##          LS_US_EW       Activist_EW     Distressed_EW          EM_FI_EW 
##              0.05              0.05              0.05              0.05 
##       Risk_Arb_EW         CB_Arb_EW      RV_Credit_EW          RV_FI_EW 
##              0.05              0.05              0.05              0.05 
##           FEMN_EW           QEMN_EW       Stat_Arb_EW  Struct_Credit_EW 
##              0.05              0.05              0.05              0.05 
## 
## $obj_fun
## [1] 3.23212
## 
## $is_feasible
## [1] TRUE
##            CTA_EW            GAA_EW   Global_Macro_EW         Insurance 
##        0.09460730        0.04799774        0.04663004        0.10716993 
## LS_AsiaPacific_EW    LS_Emerging_EW      LS_Europe_EW       LS_Japan_EW 
##        0.03884290        0.03653035        0.03652351        0.05514338 
##          LS_US_EW       Activist_EW     Distressed_EW          EM_FI_EW 
##        0.03613477        0.03976235        0.03855157        0.04090004 
##       Risk_Arb_EW         CB_Arb_EW      RV_Credit_EW          RV_FI_EW 
##        0.04563462        0.04114148        0.03884820        0.05443729 
##           FEMN_EW           QEMN_EW       Stat_Arb_EW  Struct_Credit_EW 
##        0.04261355        0.05464390        0.05402889        0.04985818
##                CTA_EW     GAA_EW Global_Macro_EW Insurance LS_AsiaPacific_EW
## 2003-12-31 0.09460730 0.04799774      0.04663004 0.1071699        0.03884290
## 2004-01-31 0.09460730 0.04799774      0.04663004 0.1071699        0.03884290
## 2004-02-29 0.09403390 0.04828921      0.04631603 0.1068186        0.03853843
## 2004-03-31 0.09684184 0.04850084      0.04627843 0.1057904        0.03857216
## 2004-04-30 0.09460730 0.04799774      0.04663004 0.1071699        0.03884290
## 2004-05-31 0.09103616 0.04646764      0.04633923 0.1078073        0.03836757
##            LS_Emerging_EW LS_Europe_EW LS_Japan_EW   LS_US_EW Activist_EW
## 2003-12-31     0.03653035   0.03652351  0.05514338 0.03613477  0.03976235
## 2004-01-31     0.03653035   0.03652351  0.05514338 0.03613477  0.03976235
## 2004-02-29     0.03705618   0.03712921  0.05458365 0.03636277  0.04060264
## 2004-03-31     0.03777198   0.03729266  0.05403395 0.03636874  0.04138448
## 2004-04-30     0.03653035   0.03652351  0.05514338 0.03613477  0.03976235
## 2004-05-31     0.03600443   0.03683924  0.05677384 0.03594998  0.03975093
##            Distressed_EW   EM_FI_EW Risk_Arb_EW  CB_Arb_EW RV_Credit_EW
## 2003-12-31    0.03855157 0.04090004  0.04563462 0.04114148   0.03884820
## 2004-01-31    0.03855157 0.04090004  0.04563462 0.04114148   0.03884820
## 2004-02-29    0.03921130 0.04126254  0.04526232 0.04117350   0.03883133
## 2004-03-31    0.03892338 0.04115124  0.04526008 0.04079715   0.03833746
## 2004-04-30    0.03855157 0.04090004  0.04563462 0.04114148   0.03884820
## 2004-05-31    0.03910046 0.04114834  0.04590042 0.04148792   0.03919176
##              RV_FI_EW    FEMN_EW    QEMN_EW Stat_Arb_EW Struct_Credit_EW
## 2003-12-31 0.05443729 0.04261355 0.05464390  0.05402889       0.04985818
## 2004-01-31 0.05443729 0.04261355 0.05464390  0.05402889       0.04985818
## 2004-02-29 0.05407068 0.04232576 0.05431523  0.05379288       0.05002388
## 2004-03-31 0.05375697 0.04190642 0.05395195  0.05317352       0.04990635
## 2004-04-30 0.05443729 0.04261355 0.05464390  0.05402889       0.04985818
## 2004-05-31 0.05534647 0.04276485 0.05462273  0.05438869       0.05071201
##                   portfolio.returns
## Annualized Return        0.06318591
##                   portfolio.returns
## Annualized Return        0.06208222
##                               portfolio.returns
## Annualized Standard Deviation        0.03621619
##    portfolio.returns
## ES       -0.03364987
## Skew -1.313767
## Excess Kurtosis 5.873133
##                                   portfolio.returns
## Annualized Sharpe Ratio (Rf=1.2%)           1.40019
## beta 0.1956528
## bull beta 0.178067
## bear beta 0.2142725
##         From     Trough         To   Depth Length To Trough Recovery
## 1 2008-06-30 2008-11-30 2009-07-31 -0.0920     14         6        8
## 2 2020-02-29 2020-03-31 2020-07-31 -0.0637      6         2        4
## 3 2011-05-31 2011-09-30 2012-02-29 -0.0337     10         5        5
## 4 2018-02-28 2018-12-31 2019-04-30 -0.0328     15        11        4
## 5 2010-05-31 2010-06-30 2010-09-30 -0.0168      5         2        3

## # A tibble: 2 × 10
##   Portfolio      Return  StDev `Expected Shortfa…`  Skew Kurtosis `Sharpe Ratio`
##   <chr>           <dbl>  <dbl>               <dbl> <dbl>    <dbl>          <dbl>
## 1 Equal Weighted 0.0659 0.0415             -0.0425 -1.54     7.20           1.29
## 2 Risk Parity    0.0632 0.0362             -0.0336 -1.31     5.87           1.40
## # … with 3 more variables: `Equity Beta` <dbl>, `Bear Beta` <dbl>,
## #   `Bull Beta` <dbl>
returns<-R
funds<-colnames(returns)
portfolio<-portfolio.spec(assets=funds)
portfolio<-add.constraint(portfolio=portfolio,type="full_investment")
portfolio<-add.constraint(portfolio = portfolio,type="box",
                          min=0,
                          max=1)
portfolio<-add.objective(portfolio=portfolio,type="return",name="mean")
portfolio<-add.constraint(portfolio=portfolio,type="return",return_target=return_target/12)

portfolio <- add.objective(portfolio=portfolio, type="risk", name="StdDev")

opt_mvo<-optimize.portfolio(R=returns,portfolio=portfolio,
                            optimize_method = "ROI",trace=TRUE)
## Registered S3 method overwritten by 'ROI':
##   method           from              
##   print.constraint PortfolioAnalytics
opt_mvo
## ***********************************
## PortfolioAnalytics Optimization
## ***********************************
## 
## Call:
## optimize.portfolio(R = returns, portfolio = portfolio, optimize_method = "ROI", 
##     trace = TRUE)
## 
## Optimal Weights:
##            CTA_EW            GAA_EW   Global_Macro_EW         Insurance 
##            0.0000            0.0000            0.2332            0.1355 
## LS_AsiaPacific_EW    LS_Emerging_EW      LS_Europe_EW       LS_Japan_EW 
##            0.0000            0.0000            0.0000            0.0000 
##          LS_US_EW       Activist_EW     Distressed_EW          EM_FI_EW 
##            0.0000            0.0000            0.0000            0.0000 
##       Risk_Arb_EW         CB_Arb_EW      RV_Credit_EW          RV_FI_EW 
##            0.0000            0.0000            0.0000            0.1616 
##           FEMN_EW           QEMN_EW       Stat_Arb_EW  Struct_Credit_EW 
##            0.1090            0.0000            0.2665            0.0942 
## 
## Objective Measure:
##     mean 
## 0.005167 
## 
## 
##   StdDev 
## 0.006583
weights<-opt_mvo$weights
round(weights,3)
##            CTA_EW            GAA_EW   Global_Macro_EW         Insurance 
##             0.000             0.000             0.233             0.135 
## LS_AsiaPacific_EW    LS_Emerging_EW      LS_Europe_EW       LS_Japan_EW 
##             0.000             0.000             0.000             0.000 
##          LS_US_EW       Activist_EW     Distressed_EW          EM_FI_EW 
##             0.000             0.000             0.000             0.000 
##       Risk_Arb_EW         CB_Arb_EW      RV_Credit_EW          RV_FI_EW 
##             0.000             0.000             0.000             0.162 
##           FEMN_EW           QEMN_EW       Stat_Arb_EW  Struct_Credit_EW 
##             0.109             0.000             0.267             0.094
MVO.weights<-as.vector(matrix(weights,ncol=20)) #USE w AS A VECTOR TO BE ABLE TO USE ON_REBALANCE COMMAND

portfolioReturns<-Return.portfolio(R=R,weights = MVO.weights,rebalance_on = "quarters",verbose = TRUE)

head(round(portfolioReturns$BOP.Weight,3))
##            CTA_EW GAA_EW Global_Macro_EW Insurance LS_AsiaPacific_EW
## 2003-12-31      0      0           0.233     0.135                 0
## 2004-01-31      0      0           0.233     0.135                 0
## 2004-02-29      0      0           0.233     0.136                 0
## 2004-03-31      0      0           0.234     0.135                 0
## 2004-04-30      0      0           0.233     0.135                 0
## 2004-05-31      0      0           0.230     0.135                 0
##            LS_Emerging_EW LS_Europe_EW LS_Japan_EW LS_US_EW Activist_EW
## 2003-12-31              0            0           0        0           0
## 2004-01-31              0            0           0        0           0
## 2004-02-29              0            0           0        0           0
## 2004-03-31              0            0           0        0           0
## 2004-04-30              0            0           0        0           0
## 2004-05-31              0            0           0        0           0
##            Distressed_EW EM_FI_EW Risk_Arb_EW CB_Arb_EW RV_Credit_EW RV_FI_EW
## 2003-12-31             0        0           0         0            0    0.162
## 2004-01-31             0        0           0         0            0    0.162
## 2004-02-29             0        0           0         0            0    0.161
## 2004-03-31             0        0           0         0            0    0.161
## 2004-04-30             0        0           0         0            0    0.162
## 2004-05-31             0        0           0         0            0    0.163
##            FEMN_EW QEMN_EW Stat_Arb_EW Struct_Credit_EW
## 2003-12-31   0.109       0       0.267            0.094
## 2004-01-31   0.109       0       0.267            0.094
## 2004-02-29   0.109       0       0.267            0.095
## 2004-03-31   0.108       0       0.265            0.095
## 2004-04-30   0.109       0       0.267            0.094
## 2004-05-31   0.109       0       0.267            0.095
Return.annualized(portfolioReturns$returns,geometric = TRUE,scale=12)
##                   portfolio.returns
## Annualized Return        0.06369037
Return.annualized(portfolioReturns$returns,geometric = FALSE,scale=12)
##                   portfolio.returns
## Annualized Return        0.06216313
StdDev.annualized(portfolioReturns$returns)
##                               portfolio.returns
## Annualized Standard Deviation        0.02282451
ES(portfolioReturns$returns)
##    portfolio.returns
## ES       -0.02260593
cat('Skew',skewness(portfolioReturns$returns))
## Skew -1.507038
cat('Excess Kurtosis',kurtosis(portfolioReturns$returns,method="excess"))
## Excess Kurtosis 8.175262
SharpeRatio.annualized(portfolioReturns$returns,Rf=cash.ts)
##                                   portfolio.returns
## Annualized Sharpe Ratio (Rf=1.2%)          2.243656
cat('beta',CAPM.beta(portfolioReturns$returns,equity.ts))
## beta 0.09162089
cat('bull beta',CAPM.beta.bull(portfolioReturns$returns,equity.ts))
## bull beta 0.1158619
cat('bear beta',CAPM.beta.bear(portfolioReturns$returns,equity.ts))
## bear beta 0.09307244
table.Drawdowns(portfolioReturns$returns)
##         From     Trough         To   Depth Length To Trough Recovery
## 1 2020-02-29 2020-03-31 2020-06-30 -0.0386      5         2        3
## 2 2008-09-30 2008-10-31 2009-01-31 -0.0316      5         2        3
## 3 2018-10-31 2018-12-31 2019-03-31 -0.0203      6         3        3
## 4 2008-03-31 2008-03-31 2008-05-31 -0.0178      3         1        2
## 5 2017-09-30 2017-09-30 2018-01-31 -0.0070      5         1        4
charts.PerformanceSummary(portfolioReturns$returns)

portfolio.return<-Return.annualized(portfolioReturns$returns)[1]
portfolio.sd<-StdDev.annualized(portfolioReturns$returns)[1]
portfolio.ES<-ES(portfolioReturns$returns)[1]
portfolio.skew<-skewness(portfolioReturns$returns)[1]
portfolio.kurt<-kurtosis(portfolioReturns$returns,method="excess")[1]
portfolio.sharpe<-SharpeRatio.annualized(portfolioReturns$returns,Rf=cash.ts)[1]
portfolio.beta<-CAPM.beta(portfolioReturns$returns,equity.ts)[1]
portfolio.bull<-CAPM.beta.bull(portfolioReturns$returns,equity.ts)[1]
portfolio.bear<-CAPM.beta.bear(portfolioReturns$returns,equity.ts)[1]

portfolio.results<-portfolio.results %>%
    add_row(Portfolio="MVO",
                          Return=portfolio.return,StDev=portfolio.sd,
                          `Expected Shortfall`=portfolio.ES,Skew=portfolio.skew,
                          Kurtosis=portfolio.kurt,`Sharpe Ratio`=portfolio.sharpe,
                          `Equity Beta`=portfolio.beta,`Bear Beta`=portfolio.bear,
                          `Bull Beta`=portfolio.bull)
portfolio.results
## # A tibble: 3 × 10
##   Portfolio      Return  StDev `Expected Shortfa…`  Skew Kurtosis `Sharpe Ratio`
##   <chr>           <dbl>  <dbl>               <dbl> <dbl>    <dbl>          <dbl>
## 1 Equal Weighted 0.0659 0.0415             -0.0425 -1.54     7.20           1.29
## 2 Risk Parity    0.0632 0.0362             -0.0336 -1.31     5.87           1.40
## 3 MVO            0.0637 0.0228             -0.0226 -1.51     8.18           2.24
## # … with 3 more variables: `Equity Beta` <dbl>, `Bear Beta` <dbl>,
## #   `Bull Beta` <dbl>
returns<-R
short_returns<-returns['2011/'] #for equal weighting
funds<-colnames(returns)

#Equal weighted portfolio
equal_weight<- rep(1/ncol(returns),ncol(returns))
base_case<-Return.portfolio(R=short_returns,weights=equal_weight,rebalance_on = "years")
colnames(base_case)<-"Equal Weighted"
#table.AnnualizedReturns(base_case)

#MVO portfolio
portfolio<-portfolio.spec(assets=funds)
portfolio<-add.constraint(portfolio=portfolio,type="full_investment")
portfolio<-add.constraint(portfolio = portfolio,type="box",
                          min=0,
                          max=1)
#portfolio<-add.constraint(portfolio=portfolio,type="return",return_target=0.053/12)
#portfolio<-add.objective(portfolio=portfolio,type="return",name="mean")
portfolio <- add.objective(portfolio=portfolio, type="risk", name="StdDev")

opt_rolling<-optimize.portfolio.rebalancing(R=returns,portfolio=portfolio,
                            optimize_method = "ROI",rebalance_on = "years",
                            training_period = 84,rolling_period= 84,trace=TRUE)
## Warning: executing %dopar% sequentially: no parallel backend registered
MVO_returns<-Return.portfolio(returns,extractWeights(opt_rolling))
MVO_weight<-extractWeights(opt_rolling)
ret_summary<-cbind(base_case,MVO_returns)
colnames(ret_summary)<-c("Equal Weighted","MVO")
table.AnnualizedReturns(ret_summary)
##                           Equal Weighted    MVO
## Annualized Return                 0.0531 0.0439
## Annualized Std Dev                0.0370 0.0234
## Annualized Sharpe (Rf=0%)         1.4378 1.8784
table.Drawdowns(base_case)
##         From     Trough         To   Depth Length To Trough Recovery
## 1 2020-02-29 2020-03-31 2020-07-31 -0.0748      6         2        4
## 2 2011-05-31 2011-09-30 2012-03-31 -0.0452     11         5        6
## 3 2018-02-28 2018-12-31 2019-04-30 -0.0311     15        11        4
## 4 2015-06-30 2016-02-29 2016-07-31 -0.0221     14         9        5
## 5 2012-04-30 2012-05-31 2012-08-31 -0.0130      5         2        3
table.Drawdowns(MVO_returns)
##         From     Trough         To   Depth Length To Trough Recovery
## 1 2020-02-29 2020-03-31 2020-07-31 -0.0452      6         2        4
## 2 2017-09-30 2017-09-30 2018-08-31 -0.0212     12         1       11
## 3 2018-10-31 2018-12-31 2019-06-30 -0.0208      9         3        6
## 4 2011-03-31 2011-03-31 2011-05-31 -0.0073      3         1        2
## 5 2011-08-31 2011-09-30 2011-10-31 -0.0054      3         2        1
chart.Weights(opt_rolling)

#Optimization with risk budget
portfolio.rb<-portfolio.spec(assets=funds)
portfolio.rb<-add.constraint(portfolio=portfolio.rb,type="full_investment")
portfolio.rb<-add.constraint(portfolio=portfolio.rb,type="long_only")
portfolio.rb<-add.objective(portfolio=portfolio.rb,
                            type="risk_budget",
                            name="StdDev",
                            min_prisk=0,
                            max_prisk=0.25)

#portfolio<-add.constraint(portfolio=portfolio,type="return",return_target=0.053/12)
#portfolio<-add.objective(portfolio=portfolio,type="return",name="mean")
#portfolio <- add.objective(portfolio=portfolio, type="risk", name="StdDev")

set.seed(1)
rb_rolling<-optimize.portfolio.rebalancing(R=returns,portfolio=portfolio.rb,
                            optimize_method = "random",rebalance_on = "years",
                            training_period = 84,rolling_period= 84,trace=TRUE)
## Leverage constraint min_sum and max_sum are restrictive, 
##               consider relaxing. e.g. 'full_investment' constraint should be min_sum=0.99 and max_sum=1.01
## Leverage constraint min_sum and max_sum are restrictive, 
##               consider relaxing. e.g. 'full_investment' constraint should be min_sum=0.99 and max_sum=1.01
## Leverage constraint min_sum and max_sum are restrictive, 
##               consider relaxing. e.g. 'full_investment' constraint should be min_sum=0.99 and max_sum=1.01
## Leverage constraint min_sum and max_sum are restrictive, 
##               consider relaxing. e.g. 'full_investment' constraint should be min_sum=0.99 and max_sum=1.01
## Leverage constraint min_sum and max_sum are restrictive, 
##               consider relaxing. e.g. 'full_investment' constraint should be min_sum=0.99 and max_sum=1.01
## Leverage constraint min_sum and max_sum are restrictive, 
##               consider relaxing. e.g. 'full_investment' constraint should be min_sum=0.99 and max_sum=1.01
## Leverage constraint min_sum and max_sum are restrictive, 
##               consider relaxing. e.g. 'full_investment' constraint should be min_sum=0.99 and max_sum=1.01
## Leverage constraint min_sum and max_sum are restrictive, 
##               consider relaxing. e.g. 'full_investment' constraint should be min_sum=0.99 and max_sum=1.01
## Leverage constraint min_sum and max_sum are restrictive, 
##               consider relaxing. e.g. 'full_investment' constraint should be min_sum=0.99 and max_sum=1.01
## Leverage constraint min_sum and max_sum are restrictive, 
##               consider relaxing. e.g. 'full_investment' constraint should be min_sum=0.99 and max_sum=1.01
## Leverage constraint min_sum and max_sum are restrictive, 
##               consider relaxing. e.g. 'full_investment' constraint should be min_sum=0.99 and max_sum=1.01
## Leverage constraint min_sum and max_sum are restrictive, 
##               consider relaxing. e.g. 'full_investment' constraint should be min_sum=0.99 and max_sum=1.01
risk_returns<-Return.portfolio(returns,extractWeights(rb_rolling))
risk_weight<-extractWeights(rb_rolling)
ret_summary<-cbind(base_case,MVO_returns,risk_returns)
colnames(ret_summary)<-c("Equal Weighted","MVO","Risk Budget")
table.AnnualizedReturns(ret_summary)
##                           Equal Weighted    MVO Risk Budget
## Annualized Return                 0.0531 0.0439      0.0543
## Annualized Std Dev                0.0370 0.0234      0.0316
## Annualized Sharpe (Rf=0%)         1.4378 1.8784      1.7167
table.CAPM(ret_summary,equity.ts)
##                     Equal Weighted to APP_Equity MVO to APP_Equity
## Alpha                                     0.0021            0.0026
## Beta                                      0.2315            0.1043
## Beta+                                     0.1967            0.1150
## Beta-                                     0.3160            0.1543
## R-squared                                 0.7361            0.3733
## Annualized Alpha                          0.0257            0.0315
## Correlation                               0.8580            0.6110
## Correlation p-value                       0.0000            0.0000
## Tracking Error                            0.1588            0.1587
## Active Premium                           -0.0606           -0.0698
## Information Ratio                        -0.3816           -0.4398
## Treynor Ratio                             0.2295            0.4211
##                     Risk Budget to APP_Equity
## Alpha                                  0.0026
## Beta                                   0.1886
## Beta+                                  0.1647
## Beta-                                  0.2392
## R-squared                              0.6671
## Annualized Alpha                       0.0318
## Correlation                            0.8167
## Correlation p-value                    0.0000
## Tracking Error                         0.1576
## Active Premium                        -0.0594
## Information Ratio                     -0.3771
## Treynor Ratio                          0.2879
table.Stats(ret_summary)
##                 Equal Weighted      MVO Risk Budget
## Observations          127.0000 127.0000    127.0000
## NAs                     0.0000   0.0000      0.0000
## Minimum                -0.0634  -0.0410     -0.0410
## Quartile 1             -0.0001   0.0010      0.0004
## Median                  0.0055   0.0036      0.0045
## Arithmetic Mean         0.0044   0.0036      0.0045
## Geometric Mean          0.0043   0.0036      0.0044
## Quartile 3              0.0093   0.0069      0.0094
## Maximum                 0.0336   0.0227      0.0258
## SE Mean                 0.0009   0.0006      0.0008
## LCL Mean (0.95)         0.0025   0.0024      0.0029
## UCL Mean (0.95)         0.0063   0.0048      0.0061
## Variance                0.0001   0.0000      0.0001
## Stdev                   0.0107   0.0068      0.0091
## Skewness               -1.8977  -2.4705     -1.1165
## Kurtosis               11.8620  15.1489      4.6094
table.Drawdowns(risk_returns)
##         From     Trough         To   Depth Length To Trough Recovery
## 1 2011-05-31 2011-09-30 2012-08-31 -0.0491     16         5       11
## 2 2020-02-29 2020-03-31 2020-06-30 -0.0421      5         2        3
## 3 2015-06-30 2015-09-30 2016-05-31 -0.0255     12         4        8
## 4 2018-10-31 2018-12-31 2019-03-31 -0.0201      6         3        3
## 5 2013-06-30 2013-06-30 2013-07-31 -0.0071      2         1        1
ES(ret_summary)
##    Equal Weighted         MVO Risk Budget
## ES    -0.04785089 -0.03190504 -0.02669057
table.DownsideRisk(ret_summary)
##                              Equal Weighted     MVO Risk Budget
## Semi Deviation                       0.0084  0.0055      0.0070
## Gain Deviation                       0.0064  0.0040      0.0058
## Loss Deviation                       0.0114  0.0086      0.0087
## Downside Deviation (MAR=10%)         0.0104  0.0080      0.0091
## Downside Deviation (Rf=0%)           0.0069  0.0044      0.0053
## Downside Deviation (0%)              0.0069  0.0044      0.0053
## Maximum Drawdown                     0.0748  0.0452      0.0491
## Historical VaR (95%)                -0.0112 -0.0031     -0.0079
## Historical ES (95%)                 -0.0217 -0.0140     -0.0188
## Modified VaR (95%)                  -0.0156 -0.0093     -0.0123
## Modified ES (95%)                   -0.0479 -0.0319     -0.0267
chart.Weights(rb_rolling)

charts.PerformanceSummary(ret_summary)

#Create states


z <- HedgeRSReturns.t$VIX #load VIX into z
score <- (z-mean(z, na.rm = TRUE))/sd(z, na.rm = TRUE) #calculate z score
APP_Equity<-HedgeRSReturns.t$APP_Equity

Hedge_States<-cbind(hedgeData,score,APP_Equity)#add z score to the data.table

Hedge_States$state<-"Central" #create new column based on score - named as state
Hedge_States$state[score>=1]<-"High"
Hedge_States$state[score<=1]<-"Low"
##Create stressed subset
stress.t<-Hedge_States %>%
filter(state=="High")

bull.t<-Hedge_States %>%
  filter(APP_Equity>0)

bear.t<-Hedge_States %>%
  filter(APP_Equity<0)

#Calculate the features

HF_beta<-sapply(R,beta)
HF_sd<-sapply(R,sd)*(12^0.5)
HF_mean<-sapply(R,mean)*12
HF_skew<-sapply(R,skewness)
HF_kurt<-sapply(R,kurtosis)
Sharpe<-(HF_mean-(mean(cash$Cash)*12))/HF_sd
Treynor<-(HF_mean-(mean(cash$Cash)*12))/HF_beta
Stress<-sapply(stress.t[,2:21],stressbeta)

Bull_beta<-sapply(bull.t[,2:21], bullbeta)

Bear_beta<-sapply(bear.t[,2:21], bearbeta)

df_base<-cbind(HF_mean,HF_sd,HF_skew,HF_kurt,Sharpe,Treynor,HF_beta,Stress,Bull_beta,Bear_beta)
#df_base<-cbind(HF_mean,HF_sd)

#HF_names<-c("CTA","EM GM","GAA","Global Macro","Insurance","L/S Asia Pac",
#            "LS Emerging","LS Europe","LS Global","LS Japan","LS US",
#            "Activist","Distressed","EM FI","Risk Arb","CB Arb",
#            "RV Credit","RV FI","FEMN","QEMN","Stat Arb","Structured Credit",
#            "Multi Event","Multi RV","Multi Diversifited","Multi Opportunistic")

#row.names(df_base)<-HF_names
df_base_round<-round(df_base,3)
df_base_round
##                   HF_mean HF_sd HF_skew HF_kurt Sharpe Treynor HF_beta Stress
## CTA_EW              0.053 0.075   0.153  -0.028  0.543   1.423   0.029 -0.130
## GAA_EW              0.037 0.042  -0.116   0.730  0.611   0.231   0.110  0.085
## Global_Macro_EW     0.063 0.034   0.396   0.148  1.505   0.555   0.092  0.048
## Insurance           0.044 0.039  -4.257  26.770  0.827   1.594   0.020  0.022
## LS_AsiaPacific_EW   0.090 0.086  -0.359   1.209  0.909   0.183   0.427  0.453
## LS_Emerging_EW      0.068 0.083  -0.508   1.587  0.679   0.137   0.412  0.428
## LS_Europe_EW        0.064 0.051  -0.765   1.438  1.006   0.205   0.252  0.222
## LS_Japan_EW         0.052 0.061   0.331   1.586  0.665   0.183   0.221  0.200
## LS_US_EW            0.079 0.072  -0.724   1.998  0.931   0.157   0.427  0.412
## Activist_EW         0.114 0.135  -1.208   6.227  0.758   0.125   0.817  0.920
## Distressed_EW       0.078 0.072  -2.110  10.259  0.921   0.189   0.349  0.421
## EM_FI_EW            0.067 0.072  -3.173  21.635  0.773   0.181   0.306  0.417
## Risk_Arb_EW         0.055 0.039  -1.233  10.402  1.114   0.285   0.151  0.172
## CB_Arb_EW           0.052 0.071  -3.920  29.417  0.564   0.133   0.300  0.441
## RV_Credit_EW        0.058 0.045  -1.438  10.076  1.028   0.224   0.208  0.291
## RV_FI_EW            0.063 0.037  -3.730  26.194  1.392   0.484   0.106  0.183
## FEMN_EW             0.056 0.026  -0.731   5.075  1.651   0.534   0.082  0.087
## QEMN_EW             0.037 0.032  -0.805   1.831  0.799   0.400   0.063  0.066
## Stat_Arb_EW         0.059 0.031  -0.095   1.023  1.506   0.573   0.083  0.136
## Struct_Credit_EW    0.098 0.068  -7.122  79.325  1.275   0.426   0.203  0.284
##                   Bull_beta Bear_beta
## CTA_EW                0.071    -0.194
## GAA_EW                0.110     0.057
## Global_Macro_EW       0.151    -0.003
## Insurance             0.056     0.034
## LS_AsiaPacific_EW     0.405     0.434
## LS_Emerging_EW        0.404     0.419
## LS_Europe_EW          0.192     0.236
## LS_Japan_EW           0.101     0.272
## LS_US_EW              0.390     0.403
## Activist_EW           0.748     0.989
## Distressed_EW         0.244     0.491
## EM_FI_EW              0.245     0.473
## Risk_Arb_EW           0.137     0.184
## CB_Arb_EW             0.260     0.497
## RV_Credit_EW          0.199     0.277
## RV_FI_EW              0.122     0.158
## FEMN_EW               0.101     0.049
## QEMN_EW               0.005     0.089
## Stat_Arb_EW           0.132     0.075
## Struct_Credit_EW      0.078     0.405
df_select<-cbind(HF_mean,HF_sd,HF_skew,HF_kurt,Bear_beta)

df<-na.omit(df_select)
df<-scale(df)
df
##                       HF_mean       HF_sd     HF_skew     HF_kurt   Bear_beta
## CTA_EW            -0.59695805  0.63577420  0.88967794 -0.63612129 -1.78037171
## GAA_EW            -1.38523139 -0.64406096  0.75050343 -0.59549477 -0.81039723
## Global_Macro_EW   -0.06464649 -0.93092121  1.01476497 -0.62665256 -1.04249511
## Insurance         -1.04617035 -0.75236459 -1.38648118  0.79958923 -0.89959050
## LS_AsiaPacific_EW  1.30751324  1.04406683  0.62511354 -0.56985602  0.64469505
## LS_Emerging_EW     0.20146281  0.94200331  0.54859936 -0.54959753  0.58780966
## LS_Europe_EW      -0.04242479 -0.26980880  0.41580928 -0.55757031 -0.12030004
## LS_Japan_EW       -0.62058162  0.08669125  0.98154019 -0.54960556  0.01673997
## LS_US_EW           0.73921495  0.51198058  0.43715944 -0.52754715  0.52263317
## Activist_EW        2.54040588  2.90994076  0.18709726 -0.30098393  2.78581559
## Distressed_EW      0.69346403  0.50488827 -0.27817132 -0.08497369  0.86482762
## EM_FI_EW           0.14115464  0.49602596 -0.82703090  0.52450744  0.79414057
## Risk_Arb_EW       -0.48454887 -0.75616628  0.17448593 -0.07730399 -0.32093943
## CB_Arb_EW         -0.64233146  0.47004402 -1.21253598  0.94138936  0.88644722
## RV_Credit_EW      -0.30383188 -0.50183219  0.06852502 -0.09478826  0.03906774
## RV_FI_EW          -0.06198975 -0.82478686 -1.11447982  0.76876095 -0.42245276
## FEMN_EW           -0.45001764 -1.21977855  0.43327431 -0.36270597 -0.84381758
## QEMN_EW           -1.39713970 -1.02736324  0.39494512 -0.53648698 -0.68963150
## Stat_Arb_EW       -0.26509541 -1.03149464  0.76182882 -0.57980615 -0.74254778
## Struct_Credit_EW   1.73775186  0.35716215 -2.86462540  3.61524716  0.53036705
## attr(,"scaled:center")
##     HF_mean       HF_sd     HF_skew     HF_kurt   Bear_beta 
##  0.06440247  0.05851137 -1.57076228 11.84512776  0.26719421 
## attr(,"scaled:scale")
##     HF_mean       HF_sd     HF_skew     HF_kurt   Bear_beta 
##  0.01957104  0.02624511  1.93772732 18.66544446  0.25896886
heatmap(df,scale="row")

pheatmap(df,cutree_rows = 8)

#Calculate the clusters

set.seed(1)
distance<-get_dist(df,method="euclidean")
fviz_dist(distance,gradient=list(low="#00AFBB",mid="white",high="#FC4E07"))

fviz_nbclust(df,kmeans,method="wss")

fviz_nbclust(df,kmeans,method="silhouette")

gap_stat <- clusGap(df, FUN = kmeans, nstart = 25, d.power=1,
                    K.max = 12, B = 300)
fviz_gap_stat(gap_stat)

k2<-kmeans(df,centers = 8,nstart = 25)
fviz_cluster(k2,data=df,main="K means")

#Agglomerative clustering
res.dist<-dist(df,method="euclidean")
res.hc<-hclust(d=res.dist,method="ward.D2")
fviz_dend(res.hc,ced=0.5)
## Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> =
## "none")` instead.

res.coph<-cophenetic(res.hc)
cor(res.dist,res.coph)
## [1] 0.5630329
#create clusters
cluster1<-R$Activist_EW
cluster2<-R$Struct_Credit_EW
cluster3<-cbind(R$Insurance,R$RV_FI_EW)
cluster4<-R$CTA_EW
cluster5<-cbind(R$GAA_EW,R$QEMN_EW,R$FEMN_EW,R$Global_Macro_EW,R$Stat_Arb_EW)
cluster6<-cbind(R$EM_FI_EW,R$CB_Arb_EW)
cluster7<-cbind(R$LS_Europe_EW,R$LS_Japan_EW,R$Risk_Arb_EW,R$RV_Credit_EW)
cluster8<-cbind(R$LS_Emerging_EW,R$Distressed_EW,R$LS_AsiaPacific_EW,R$LS_US_EW)

#risk parity cluster3
cor3<-cor(cluster3)
riskParity<-riskParityPortfolio(cor3)
riskParity$w
## Insurance  RV_FI_EW 
##       0.5       0.5
weights = xts(t(riskParity$w), as.Date("2003-12-31"))
risk.parity.weights<-as.vector(matrix(weights,ncol=ncol(weights)))
PortfolioReturns<-Return.portfolio(cluster3,weights=risk.parity.weights,rebalance_on="quarters",verbose = TRUE)
cluster3.returns<-PortfolioReturns$returns
colnames(cluster3.returns) = "cluster3"
head(cluster3.returns)
##               cluster3
## 2003-12-31 0.010670414
## 2004-01-31 0.009426982
## 2004-02-29 0.006796279
## 2004-03-31 0.001945915
## 2004-04-30 0.005968538
## 2004-05-31 0.002264446
#risk parity cluster5
cor5<-cor(cluster5)
riskParity<-riskParityPortfolio(cor5)
riskParity$w
##          GAA_EW         QEMN_EW         FEMN_EW Global_Macro_EW     Stat_Arb_EW 
##       0.1973061       0.2022335       0.1962068       0.2013431       0.2029106
weights = xts(t(riskParity$w), as.Date("2003-12-31"))
risk.parity.weights<-as.vector(matrix(weights,ncol=ncol(weights)))
PortfolioReturns<-Return.portfolio(cluster5,weights=risk.parity.weights,rebalance_on="quarters",verbose = TRUE)
cluster5.returns<-PortfolioReturns$returns
colnames(cluster5.returns) = "cluster5"
head(cluster5.returns)
##                 cluster5
## 2003-12-31  0.0142605069
## 2004-01-31  0.0108685760
## 2004-02-29  0.0096428902
## 2004-03-31  0.0071583794
## 2004-04-30 -0.0108423834
## 2004-05-31 -0.0005066958
#risk parity cluster6
cor6<-cor(cluster6)
riskParity<-riskParityPortfolio(cor6)
riskParity$w
##  EM_FI_EW CB_Arb_EW 
##       0.5       0.5
weights = xts(t(riskParity$w), as.Date("2003-12-31"))
risk.parity.weights<-as.vector(matrix(weights,ncol=ncol(weights)))
PortfolioReturns<-Return.portfolio(cluster6,weights=risk.parity.weights,rebalance_on="quarters",verbose = TRUE)
cluster6.returns<-PortfolioReturns$returns
colnames(cluster6.returns) = "cluster6"
head(cluster6.returns)
##                cluster6
## 2003-12-31  0.012170897
## 2004-01-31  0.019396765
## 2004-02-29  0.008633715
## 2004-03-31  0.011531761
## 2004-04-30  0.001911567
## 2004-05-31 -0.010224961
#risk parity cluster7
cor7<-cor(cluster7)
riskParity<-riskParityPortfolio(cor7)
riskParity$w
## LS_Europe_EW  LS_Japan_EW  Risk_Arb_EW RV_Credit_EW 
##    0.2293850    0.2697013    0.2565336    0.2443802
weights = xts(t(riskParity$w), as.Date("2003-12-31"))
risk.parity.weights<-as.vector(matrix(weights,ncol=ncol(weights)))
PortfolioReturns<-Return.portfolio(cluster7,weights=risk.parity.weights,rebalance_on="quarters",verbose = TRUE)
cluster7.returns<-PortfolioReturns$returns
colnames(cluster7.returns) = "cluster7"
head(cluster7.returns)
##                cluster7
## 2003-12-31  0.011833357
## 2004-01-31  0.013357164
## 2004-02-29  0.009769259
## 2004-03-31  0.021169238
## 2004-04-30  0.008244672
## 2004-05-31 -0.007019642
#risk parity cluster3
cor8<-cor(cluster8)
riskParity<-riskParityPortfolio(cor8)
riskParity$w
##    LS_Emerging_EW     Distressed_EW LS_AsiaPacific_EW          LS_US_EW 
##         0.2446345         0.2571271         0.2518334         0.2464050
weights = xts(t(riskParity$w), as.Date("2003-12-31"))
risk.parity.weights<-as.vector(matrix(weights,ncol=ncol(weights)))
PortfolioReturns<-Return.portfolio(cluster8,weights=risk.parity.weights,rebalance_on="quarters",verbose = TRUE)
cluster8.returns<-PortfolioReturns$returns
colnames(cluster8.returns) = "cluster8"
head(cluster8.returns)
##                cluster8
## 2003-12-31  0.031494637
## 2004-01-31  0.022117223
## 2004-02-29  0.017780818
## 2004-03-31  0.007954177
## 2004-04-30 -0.009476485
## 2004-05-31 -0.010701347
cluster1.returns<-cluster1
colnames(cluster1.returns) = "cluster1"

cluster2.returns<-cluster2
colnames(cluster2.returns) = "cluster2"

cluster4.returns<-cluster4
colnames(cluster4.returns) = "cluster4"

#optimize across the clusters

R.cluster<-cbind(cluster1.returns,cluster2.returns,cluster3.returns,
                 cluster4.returns,cluster5.returns,cluster6.returns,
                 cluster7.returns,cluster8.returns)

returns<-R.cluster
funds<-colnames(returns)
portfolio<-portfolio.spec(assets=funds)
portfolio<-add.constraint(portfolio=portfolio,type="full_investment")
portfolio<-add.constraint(portfolio = portfolio,type="box",
                          min=0,
                          max=1)
#portfolio<-add.objective(portfolio=portfolio,type="return",name="mean")
portfolio<-add.constraint(portfolio=portfolio,type="return",return_target=return_target/12)

portfolio <- add.objective(portfolio=portfolio, type="risk", name="StdDev")

opt_mvo<-optimize.portfolio(R=returns,portfolio=portfolio,
                            optimize_method = "ROI",trace=TRUE)


opt_mvo
## ***********************************
## PortfolioAnalytics Optimization
## ***********************************
## 
## Call:
## optimize.portfolio(R = returns, portfolio = portfolio, optimize_method = "ROI", 
##     trace = TRUE)
## 
## Optimal Weights:
## cluster1 cluster2 cluster3 cluster4 cluster5 cluster6 cluster7 cluster8 
##   0.0000   0.2113   0.3911   0.0515   0.3461   0.0000   0.0000   0.0000 
## 
## Objective Measure:
##   StdDev 
## 0.007541
weights<-opt_mvo$weights
round(weights,3)
## cluster1 cluster2 cluster3 cluster4 cluster5 cluster6 cluster7 cluster8 
##    0.000    0.211    0.391    0.052    0.346    0.000    0.000    0.000
MVO.weights<-as.vector(matrix(weights,ncol=8)) #USE w AS A VECTOR TO BE ABLE TO USE ON_REBALANCE COMMAND

portfolioReturns<-Return.portfolio(R=R.cluster,weights = MVO.weights,rebalance_on = "quarters",verbose = TRUE)

head(round(portfolioReturns$BOP.Weight,3))
##            cluster1 cluster2 cluster3 cluster4 cluster5 cluster6 cluster7
## 2003-12-31        0    0.211    0.391    0.052    0.346        0        0
## 2004-01-31        0    0.211    0.391    0.052    0.346        0        0
## 2004-02-29        0    0.213    0.390    0.051    0.346        0        0
## 2004-03-31        0    0.213    0.389    0.053    0.345        0        0
## 2004-04-30        0    0.211    0.391    0.052    0.346        0        0
## 2004-05-31        0    0.214    0.394    0.049    0.343        0        0
##            cluster8
## 2003-12-31        0
## 2004-01-31        0
## 2004-02-29        0
## 2004-03-31        0
## 2004-04-30        0
## 2004-05-31        0
Return.annualized(portfolioReturns$returns,geometric = TRUE,scale=12)
##                   portfolio.returns
## Annualized Return        0.06362754
Return.annualized(portfolioReturns$returns,geometric = FALSE,scale=12)
##                   portfolio.returns
## Annualized Return        0.06218854
StdDev.annualized(portfolioReturns$returns)
##                               portfolio.returns
## Annualized Standard Deviation        0.02615529
ES(portfolioReturns$returns)
##    portfolio.returns
## ES       -0.03669919
cat('Skew',skewness(portfolioReturns$returns))
## Skew -3.26019
cat('Excess Kurtosis',kurtosis(portfolioReturns$returns,method="excess"))
## Excess Kurtosis 22.50283
SharpeRatio.annualized(portfolioReturns$returns,Rf=cash.ts)
##                                   portfolio.returns
## Annualized Sharpe Ratio (Rf=1.2%)          1.955331
cat('beta',CAPM.beta(portfolioReturns$returns,equity.ts))
## beta 0.09896172
cat('bull beta',CAPM.beta.bull(portfolioReturns$returns,equity.ts))
## bull beta 0.08919921
cat('bear beta',CAPM.beta.bear(portfolioReturns$returns,equity.ts))
## bear beta 0.131854
table.Drawdowns(portfolioReturns$returns)
##         From     Trough         To   Depth Length To Trough Recovery
## 1 2020-02-29 2020-03-31 2020-09-30 -0.0603      8         2        6
## 2 2008-08-31 2008-10-31 2009-05-31 -0.0447     10         3        7
## 3 2018-10-31 2018-12-31 2019-04-30 -0.0210      7         3        4
## 4 2008-03-31 2008-03-31 2008-05-31 -0.0186      3         1        2
## 5 2017-09-30 2017-09-30 2018-01-31 -0.0151      5         1        4
charts.PerformanceSummary(portfolioReturns$returns)

portfolio.return<-Return.annualized(portfolioReturns$returns)[1]
portfolio.sd<-StdDev.annualized(portfolioReturns$returns)[1]
portfolio.ES<-ES(portfolioReturns$returns)[1]
portfolio.skew<-skewness(portfolioReturns$returns)[1]
portfolio.kurt<-kurtosis(portfolioReturns$returns,method="excess")[1]
portfolio.sharpe<-SharpeRatio.annualized(portfolioReturns$returns,Rf=cash.ts)[1]
portfolio.beta<-CAPM.beta(portfolioReturns$returns,equity.ts)[1]
portfolio.bull<-CAPM.beta.bull(portfolioReturns$returns,equity.ts)[1]
portfolio.bear<-CAPM.beta.bear(portfolioReturns$returns,equity.ts)[1]

portfolio.results<-portfolio.results %>%
    add_row(Portfolio="Clusters",
                          Return=portfolio.return,StDev=portfolio.sd,
                          `Expected Shortfall`=portfolio.ES,Skew=portfolio.skew,
                          Kurtosis=portfolio.kurt,`Sharpe Ratio`=portfolio.sharpe,
                          `Equity Beta`=portfolio.beta,`Bear Beta`=portfolio.bear,
                          `Bull Beta`=portfolio.bull)
print(portfolio.results)
## # A tibble: 4 × 10
##   Portfolio      Return  StDev `Expected Shortfa…`  Skew Kurtosis `Sharpe Ratio`
##   <chr>           <dbl>  <dbl>               <dbl> <dbl>    <dbl>          <dbl>
## 1 Equal Weighted 0.0659 0.0415             -0.0425 -1.54     7.20           1.29
## 2 Risk Parity    0.0632 0.0362             -0.0336 -1.31     5.87           1.40
## 3 MVO            0.0637 0.0228             -0.0226 -1.51     8.18           2.24
## 4 Clusters       0.0636 0.0262             -0.0367 -3.26    22.5            1.96
## # … with 3 more variables: `Equity Beta` <dbl>, `Bear Beta` <dbl>,
## #   `Bull Beta` <dbl>
cols.cor<-cor(R,use="pairwise.complete.obs",method="pearson")
cols.cor
##                         CTA_EW     GAA_EW Global_Macro_EW   Insurance
## CTA_EW             1.000000000 0.63384711      0.53686342  0.06741771
## GAA_EW             0.633847113 1.00000000      0.56914962  0.07266948
## Global_Macro_EW    0.536863422 0.56914962      1.00000000  0.04872518
## Insurance          0.067417709 0.07266948      0.04872518  1.00000000
## LS_AsiaPacific_EW  0.167792587 0.45882263      0.54436081  0.07526930
## LS_Emerging_EW     0.157587754 0.51865062      0.58058153  0.03679552
## LS_Europe_EW       0.169721609 0.50724258      0.54907001  0.08680519
## LS_Japan_EW        0.002572041 0.24691161      0.36295616 -0.05822443
## LS_US_EW           0.122579030 0.42256098      0.51706311  0.09305335
## Activist_EW       -0.027255817 0.34707850      0.37326421  0.04457368
## Distressed_EW     -0.069595006 0.29261413      0.36038497  0.12131419
## EM_FI_EW          -0.026294832 0.32780172      0.36751742  0.11441308
## Risk_Arb_EW        0.100254958 0.34145982      0.42838542  0.07333043
## CB_Arb_EW         -0.079622659 0.30312500      0.26758387  0.10601017
## RV_Credit_EW      -0.066244054 0.31982005      0.32088636  0.12744401
## RV_FI_EW          -0.113956214 0.23069016      0.23383698  0.11482934
## FEMN_EW            0.191144869 0.39571343      0.57004066  0.11491615
## QEMN_EW            0.297030985 0.49622175      0.33938198  0.09516470
## Stat_Arb_EW        0.221072992 0.39657026      0.31938751  0.04140549
## Struct_Credit_EW  -0.102280565 0.18668909      0.27170746  0.13256804
##                   LS_AsiaPacific_EW LS_Emerging_EW LS_Europe_EW  LS_Japan_EW
## CTA_EW                    0.1677926     0.15758775   0.16972161  0.002572041
## GAA_EW                    0.4588226     0.51865062   0.50724258  0.246911607
## Global_Macro_EW           0.5443608     0.58058153   0.54907001  0.362956164
## Insurance                 0.0752693     0.03679552   0.08680519 -0.058224430
## LS_AsiaPacific_EW         1.0000000     0.84669192   0.70878355  0.560856922
## LS_Emerging_EW            0.8466919     1.00000000   0.77330518  0.533503186
## LS_Europe_EW              0.7087836     0.77330518   1.00000000  0.545237358
## LS_Japan_EW               0.5608569     0.53350319   0.54523736  1.000000000
## LS_US_EW                  0.7533905     0.76657822   0.83364392  0.545546239
## Activist_EW               0.6853214     0.70069722   0.76213748  0.540255875
## Distressed_EW             0.6443269     0.72871412   0.69944917  0.484097856
## EM_FI_EW                  0.5989139     0.73570708   0.59124636  0.370909454
## Risk_Arb_EW               0.5486853     0.54897213   0.60665110  0.355241291
## CB_Arb_EW                 0.6377953     0.67070627   0.58656248  0.399890956
## RV_Credit_EW              0.6557430     0.72187189   0.67222154  0.435165105
## RV_FI_EW                  0.4290837     0.48497902   0.40449434  0.291584229
## FEMN_EW                   0.5715463     0.62460590   0.70962841  0.396111296
## QEMN_EW                   0.3538599     0.43352839   0.50292971  0.312763570
## Stat_Arb_EW               0.3722156     0.41003278   0.48228642  0.233203420
## Struct_Credit_EW          0.3932673     0.49719525   0.46326153  0.314271037
##                     LS_US_EW Activist_EW Distressed_EW    EM_FI_EW Risk_Arb_EW
## CTA_EW            0.12257903 -0.02725582   -0.06959501 -0.02629483  0.10025496
## GAA_EW            0.42256098  0.34707850    0.29261413  0.32780172  0.34145982
## Global_Macro_EW   0.51706311  0.37326421    0.36038497  0.36751742  0.42838542
## Insurance         0.09305335  0.04457368    0.12131419  0.11441308  0.07333043
## LS_AsiaPacific_EW 0.75339052  0.68532137    0.64432687  0.59891390  0.54868534
## LS_Emerging_EW    0.76657822  0.70069722    0.72871412  0.73570708  0.54897213
## LS_Europe_EW      0.83364392  0.76213748    0.69944917  0.59124636  0.60665110
## LS_Japan_EW       0.54554624  0.54025588    0.48409786  0.37090945  0.35524129
## LS_US_EW          1.00000000  0.90606378    0.79517774  0.64181362  0.63964080
## Activist_EW       0.90606378  1.00000000    0.81246753  0.69970853  0.65101000
## Distressed_EW     0.79517774  0.81246753    1.00000000  0.81504974  0.57789605
## EM_FI_EW          0.64181362  0.69970853    0.81504974  1.00000000  0.51662792
## Risk_Arb_EW       0.63964080  0.65101000    0.57789605  0.51662792  1.00000000
## CB_Arb_EW         0.67785692  0.69313353    0.78639534  0.75068511  0.56341116
## RV_Credit_EW      0.74427774  0.75207768    0.91848887  0.79758871  0.53665639
## RV_FI_EW          0.43312106  0.42861395    0.48214087  0.53603056  0.37613694
## FEMN_EW           0.67913065  0.47666640    0.50557368  0.42940635  0.49948263
## QEMN_EW           0.36343220  0.27230228    0.32011730  0.28255854  0.19165180
## Stat_Arb_EW       0.48018488  0.40034471    0.29989586  0.31069024  0.31854123
## Struct_Credit_EW  0.49124996  0.55953968    0.78135732  0.75294566  0.49557914
##                     CB_Arb_EW RV_Credit_EW   RV_FI_EW   FEMN_EW   QEMN_EW
## CTA_EW            -0.07962266  -0.06624405 -0.1139562 0.1911449 0.2970310
## GAA_EW             0.30312500   0.31982005  0.2306902 0.3957134 0.4962218
## Global_Macro_EW    0.26758387   0.32088636  0.2338370 0.5700407 0.3393820
## Insurance          0.10601017   0.12744401  0.1148293 0.1149162 0.0951647
## LS_AsiaPacific_EW  0.63779528   0.65574301  0.4290837 0.5715463 0.3538599
## LS_Emerging_EW     0.67070627   0.72187189  0.4849790 0.6246059 0.4335284
## LS_Europe_EW       0.58656248   0.67222154  0.4044943 0.7096284 0.5029297
## LS_Japan_EW        0.39989096   0.43516511  0.2915842 0.3961113 0.3127636
## LS_US_EW           0.67785692   0.74427774  0.4331211 0.6791307 0.3634322
## Activist_EW        0.69313353   0.75207768  0.4286140 0.4766664 0.2723023
## Distressed_EW      0.78639534   0.91848887  0.4821409 0.5055737 0.3201173
## EM_FI_EW           0.75068511   0.79758871  0.5360306 0.4294063 0.2825585
## Risk_Arb_EW        0.56341116   0.53665639  0.3761369 0.4994826 0.1916518
## CB_Arb_EW          1.00000000   0.87374707  0.7038027 0.5026284 0.2341128
## RV_Credit_EW       0.87374707   1.00000000  0.5796750 0.5129975 0.3087876
## RV_FI_EW           0.70380267   0.57967501  1.0000000 0.3670377 0.1807845
## FEMN_EW            0.50262841   0.51299753  0.3670377 1.0000000 0.4004686
## QEMN_EW            0.23411285   0.30878764  0.1807845 0.4004686 1.0000000
## Stat_Arb_EW        0.33960253   0.35049878  0.2974508 0.5101427 0.5392435
## Struct_Credit_EW   0.59779522   0.67717901  0.3940039 0.3527211 0.2584783
##                   Stat_Arb_EW Struct_Credit_EW
## CTA_EW             0.22107299       -0.1022806
## GAA_EW             0.39657026        0.1866891
## Global_Macro_EW    0.31938751        0.2717075
## Insurance          0.04140549        0.1325680
## LS_AsiaPacific_EW  0.37221557        0.3932673
## LS_Emerging_EW     0.41003278        0.4971952
## LS_Europe_EW       0.48228642        0.4632615
## LS_Japan_EW        0.23320342        0.3142710
## LS_US_EW           0.48018488        0.4912500
## Activist_EW        0.40034471        0.5595397
## Distressed_EW      0.29989586        0.7813573
## EM_FI_EW           0.31069024        0.7529457
## Risk_Arb_EW        0.31854123        0.4955791
## CB_Arb_EW          0.33960253        0.5977952
## RV_Credit_EW       0.35049878        0.6771790
## RV_FI_EW           0.29745076        0.3940039
## FEMN_EW            0.51014272        0.3527211
## QEMN_EW            0.53924347        0.2584783
## Stat_Arb_EW        1.00000000        0.1722873
## Struct_Credit_EW   0.17228732        1.0000000
heatmap(df,scale="row")

pheatmap(df,cutree_rows = 8)

#Calculate the clusters

set.seed(1)
distance<-get_dist(df,method="euclidean")
fviz_dist(distance,gradient=list(low="#00AFBB",mid="white",high="#FC4E07"))

fviz_nbclust(df,kmeans,method="wss")

fviz_nbclust(df,kmeans,method="silhouette")

gap_stat <- clusGap(df, FUN = kmeans, nstart = 25, d.power=1,
                    K.max = 12, B = 300)
fviz_gap_stat(gap_stat)

k2<-kmeans(df,centers = 8,nstart = 25)
fviz_cluster(k2,data=df,main="K means")